package com.edu.service;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;

import org.springframework.web.multipart.MultipartFile;

import com.edu.exception.FileException;
import com.edu.vo.FileVO;
import com.edu.vo.SimpleTree;

/**
 * MVC 的服务层
 * 业务逻辑层，负责业务模块的逻辑应用设计
 *
 * @author Administrator
 */
public interface FileService {

    /**
     * 创建目录或者文件，包括多级目录或文件
     *
     * @param dir
     * @param name
     * @throws IOException
     * @throws FileException
     */
    void createDocument(String name) throws IOException, FileException;

    /**
     * 删除目录或者文件
     * 如果是文件需要删除当前文件，如果是目录需要删除目录并删除该目录下的所有文件
     *
     * @param name
     * @throws FileException
     * @throws IOException
     */
    public void deleteFile(String name) throws FileException, IOException;

    /**
     * 重命名文件或者目录
     *
     * @param name
     * @param rename
     * @param name2
     * @throws FileException
     * @throws IOException
     */
    public void renameFile(String name, String rename) throws IOException, FileException;

    /**
     * 下载文件或者目录
     *
     * @param name
     */
    public void downloadFile(String name);

    /**
     * 上传文件或者目录
     *
     * @param name
     */
    void uploadFile(MultipartFile file) throws FileNotFoundException;

    /**
     * 查看文件
     * 将文件的内容读入到内存，并以字符串形式返回
     *
     * @param name
     * @param name
     * @return 文件字符串
     * @throws FileNotFoundException
     * @throws IOException
     */
    public String showDocument(String name) throws FileNotFoundException, IOException;

    /**
     * 查看目录
     * 进入到该目录查看其中的文件和文件夹
     *
     * @param name
     * @return 文件
     * @throws FileException
     */
    public List<FileVO> enterDirectory(String dir) throws FileException;

    /**
     * 修改文档
     *
     * @param name
     * @return
     * @throws FileException
     * @throws Exception
     */
    void editDocument(String name, String text) throws FileException;

    /**
     * 创建目录
     *
     * @param dir
     * @param name
     * @throws FileException
     * @throws IOException
     */
    void createDirectory(String name) throws IOException, FileException;

    SimpleTree getFileTree() throws FileException;

    void copyToDir(String name, String targetDir) throws IOException;

    File getFileByName(String name);

}
